package com.qf.kele02.service;


import com.baomidou.mybatisplus.extension.service.IService;
import com.qf.kele02.entity.User;
import com.qf.kele02.vo.ResultVo;
import com.qf.kele02.vo.TableVo;
import com.qf.kele02.vo.UserVo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.text.ParseException;
import java.util.List;

@Service
public interface UserSevice extends IService< User > {

	public User getUser( Integer id );

	/**
	 * 检验用户名和密码是否正确 ，如果正确，返回user对象 ，如果错误，返回null
	 *
	 * @param username
	 * @param password
	 * @return
	 */
	User login( String username,String password );

	/**
	 * 用户注册方法
	 *
	 * @param userVo   包含了上传的文件
	 * @param realPath 头像文件存放的物理路径
	 * @return
	 */
	ResultVo regist( UserVo userVo,String realPath ) throws IOException;

	/**
	 * 检查用户名是否存在
	 *
	 * @param username
	 * @return
	 */
	ResultVo checkUsername( String username );

	/**
	 * 分页查询用户数据
	 *
	 * @param page  页号
	 * @param limit 页大小
	 * @return
	 */
	TableVo getAllUserByPage( Integer page,Integer limit );

	/**
	 * 拦截中使用的还原用户登录状态的方法
	 *
	 * @param username
	 * @param md5password
	 * @return
	 */
	User restoreUser( String username,String md5password );

	/**
	 * 使用分页插件
	 *
	 * @param page
	 * @param limit
	 * @return
	 */
	TableVo getUserByPagehelper( Integer page,Integer limit );

	/**
	 * 添加用户
	 *
	 * @param user
	 * @return
	 */
	ResultVo addUser( User user );

	/**
	 * 根据id删除用户
	 *
	 * @param ids
	 * @return
	 */
	ResultVo deleteUserByIds( List< Integer > ids );

	/**
	 * 修改用户
	 *
	 * @param user
	 * @return
	 */
	ResultVo updateUser( User user );

	/**
	 * 带有条件的分页查询
	 *
	 * @param page
	 * @param limit
	 * @param userVo
	 * @return
	 */
	TableVo< User > getUsersByContdition( Integer page,Integer limit,UserVo userVo );


	@Transactional(rollbackFor=Exception.class)
	String export( ) throws IllegalAccessException, ClassNotFoundException;

	TableVo< User > insert( MultipartFile source ) throws IOException, IllegalAccessException, InstantiationException, ClassNotFoundException, ParseException;

	ResultVo deleteHead( );
}

